﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;


/*
友元：
类的主要特点之一是数据隐藏，即类的私有成员无法在类的外部（作用域之外）访问。但是有时候需要在类的外部访问私有成员怎么办？
比如，客厅是public的，允许所有人访问，卧室是private的，只有自己能访问，但是有时也可以让好朋友访问。
解决方法是使用友元函数，友元函数是一种特权函数，c++允许这个特权函数访问私有成员。

友元的概念：友元是赋予全局函数、类的成员函数有访问别的类的私有成员属性的权限。 

友元语法：
friend关键字只出现在声明处；
其他类、类成员函数、全局函数都可声明为友元；
友元函数不是类的成员，不带this指针；
友元函数可以访问对象任意成员属性，包括私有属性。

友元类注意：
1. 友元关系不能被继承；
2. 友元关系是单向的，类A是类B的友元，但类B不一定是类A的友元；
3. 友元关系不具有传递性，类A是类B的友元，类B是类C的友元，但类A不一定是类C的友元。
*/


class Building {
	// 声明这个全局函数为Building类的友元函数，放在public或private下都一样  
	friend void GoodGay(Building &bd);
public:
	Building() {
		keting = "客厅";
		woshi = "卧室";
	}
public:
	string keting;
private:
	string woshi;
};

// 全局函数友元 
void GoodGay(Building &bd) {
	cout << "好朋友访问：" << bd.keting << endl;
	cout << "好朋友访问：" << bd.woshi << endl;
}

void test01() {
	Building bd;
	GoodGay(bd); 
}


int main()
{

	test01(); 

	system("pause");
	return EXIT_SUCCESS;
}